package sv.gob.mtps.sib.service;

import java.util.List;

import sv.gob.mtps.sib.model.Bodega;
import sv.gob.mtps.sib.model.DetFacVw;
import sv.gob.mtps.sib.model.FacMasterVw;
import sv.gob.mtps.sib.model.Factura;
import sv.gob.mtps.sib.model.FacturaHasProducto;
import sv.gob.mtps.sib.model.Inventario;
import sv.gob.mtps.sib.model.InventarioHasTransacciones;
import sv.gob.mtps.sib.model.ObjProductVw;
import sv.gob.mtps.sib.model.Objetoespecifico;
import sv.gob.mtps.sib.model.ProductoHasObjetoespecifico;
import sv.gob.mtps.sib.model.Promedio;
import sv.gob.mtps.sib.model.PromedioUnitarioVw;
import sv.gob.mtps.sib.model.Transaccion;

public interface FacturaService {
    public void addFactura(Factura factura);
    public List<Factura> listFactura();
    public void removeFactura(Integer id);
    public Factura findFactura(Integer id);
    public void updateFactura(Factura factura);
    public List<FacMasterVw> listMasterVw();
    /*Se agregan los metodos 
     * para los update del detalle 
     * de la Factura*/
    public void addFacturaDet(FacturaHasProducto facturaDet);
    public List<FacturaHasProducto> listFacturaDet(Integer id);
    public List<FacturaHasProducto> listFacturaDet(Integer id,Integer idProObj);
    public void removeFacturaDet(Integer id);
    public FacturaHasProducto findFacturaDet(Integer id);
    public void updateFacturaDet(FacturaHasProducto facturaDet);
    public List<DetFacVw>listDetFact(Integer id); 
    /*se Busca el 
     * Objeto Especifico*/
    public List<ObjProductVw> listObjeto();
    /*Se busca 
     * el listado de Bodegas
     */
    public List<Bodega>listBodega();
    /*Busqueda de inventario por bodega,fuente
     *  de fondo y producto_objetoespecifico
     */    
    public List<Inventario> listInvent(int bodega,int fuenteFondo,int producto_objeto);
    /*se agrega inventario*/
    public void addInventario(Inventario inv);
    /*se busca la bodega*/
	public Bodega findBodega(int id);
	/*se Busca el productoObjetoEspecifico*/
	public ProductoHasObjetoespecifico findPrdObj(int id);
	/*metodo que almacena el log de la transaccion*/
	public void addTransaccion(InventarioHasTransacciones transact);
	/*metodo que extrae la transaccion*/
	public Transaccion findTransaccion(int id);
	/*Metodo que actualiza al Inventario*/
	public void updateInventario(Inventario inv);
	/*Metodo que extrae la lista de Transacciones*/
	public List<InventarioHasTransacciones> listTransacciones(int documentoPadre, int hijo,int tipoTran);
    /*obtiene la cantidades de transacciones a validar*/
	public int getTotalTran(int documentoPadre,int tipoTran);
	public int getTotalTran(int documentoPadre);
	
	/*Calculo del precio promedio*/
	public List<Promedio> listPromedio(int productoId); 
	public void addPromedio(Promedio pr);
	public void updatePromedio(Promedio pr);
	public Promedio findPromedio(Integer promedioId);
	public List<PromedioUnitarioVw> listPromedioTotal(int productoId);
}
